import * as hamcUtils from './gameUtils'

/**
 * Calculate the result of a Plinko game.
 * @param {number} rows - Plinko行数,当前 8到16行
 * @param {string} serverSeed - 服务端种子
 * @param {string} clientSeed - 客户端种子
 * @param {number} nonce - 随机数
 * @returns {number} - 返回Plinko 索引位置
 */
export function calculatePlinko(rows: any, serverSeed: string, clientSeed: string, nonce: any) {
	let sum = 0
	const arrays = hamcUtils.getBytesGroups(serverSeed, clientSeed, nonce, rows, 4)
	for (let i = 0; i < rows; i++) {
		const result = hamcUtils.calculateResult(arrays[i], 2) >= 1 ? 1 : 0
		sum += result
	}
	return sum
}
/**
 * Plinko-赌场种子转换为字节-前端展示公开计算过程使用
 *  @param {string} serverSeed - 服务端种子
 * @param {string} clientSeed - 客户端种子
 * @param {number} nonce - 随机数
 * @returns {object} - 返回字节对象
 */
export function casinoSeedToBytes(serverSeed: any, clientSeed: any, nonce: any) {
	return hamcUtils.casinoSeedToBytes(serverSeed, clientSeed, nonce, 3)
}
/**
 * 字节到数字的计算过程用到的分组 Plinko 前端公开过程 20组，每组4个字节
 * @param {string} serverSeed - 服务端种子
 * @param {string} clientSeed - 客户端种子
 * @param {number} nonce - 随机数
 * @returns {array} - 返回字节数组
 */
export function bytesToNumberGroups(serverSeed: any, clientSeed: any, nonce: any) {
	return hamcUtils.getBytesGroups(serverSeed, clientSeed, nonce, 20, 4)
}
